package mx.frantor.catalogos.daoimp;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import mx.frantor.catalogos.dao.InventarioMateriaPrimaDAO;
import mx.frantor.catalogos.entitys.InventariomateriasPrimasEntity;
import mx.frantor.util.HibernateUtil;

public class InventarioMateriaPrimaDAOImpl implements InventarioMateriaPrimaDAO {

	@Override
	public String agregarInventarioMateriaPrima(
			InventariomateriasPrimasEntity nuevoInventariomateriasPrimas) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		
		session.beginTransaction();
		try {
		session.save(nuevoInventariomateriasPrimas);
		session.flush();
		session.getTransaction().commit();
		e = nuevoInventariomateriasPrimas.getCodBarras().toString();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();

		System.out.println("agregar inventario mat pri resultado " + e);

		return e;
	}

	@Override
	public String modificarInventarioMateriaPrima(
			InventariomateriasPrimasEntity modificarInventariomateriasPrimas) {
			String e = "";
			Session session = HibernateUtil.getSessionFactory()
					.getCurrentSession();
		
			session.beginTransaction();
			try {
				InventariomateriasPrimasEntity InvMPTemp = (InventariomateriasPrimasEntity) session.get(
						InventariomateriasPrimasEntity.class, modificarInventariomateriasPrimas.getCodBarras());
			session.flush();
			session.evict(InvMPTemp);
			session.update(modificarInventariomateriasPrimas);
			session.getTransaction().commit();
			} catch (Exception x) {
				//e.printStackTrace();
				session.getTransaction().rollback();
				e = x.getMessage();
				//return e.toString();
			}
			HibernateUtil.getSessionFactory().getCurrentSession().close();
			System.out.println("modificar inventario mat pri resultado " + e);

			return e;
	}

	@Override
	public String eliminarInventarioMateriaPrima(
			Integer idInventariomateriasPrimas) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		

			// TODO Auto-generated method stub			
			session.beginTransaction();
			try {
				InventariomateriasPrimasEntity modulosContrasenasElimina = (InventariomateriasPrimasEntity) session.get(
						InventariomateriasPrimasEntity.class, idInventariomateriasPrimas);
			session.delete(modulosContrasenasElimina);
			session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		//HibernateUtil.getSessionFactory().getCurrentSession().close();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println("eliminar inventario mat pri resultado " + e);

		return e;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<InventariomateriasPrimasEntity> getTodosInventariosMateriasPrimasActivos() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<InventariomateriasPrimasEntity> InvMP = session.createCriteria(InventariomateriasPrimasEntity.class).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return InvMP;
	}

	@SuppressWarnings("unchecked")
	@Override
	public InventariomateriasPrimasEntity getInventarioMateriaPrimaId(
			Integer idInventariomateriasPrimas) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<InventariomateriasPrimasEntity> InvMp = (List<InventariomateriasPrimasEntity>) session.createCriteria(InventariomateriasPrimasEntity.class)
				.add(Restrictions.eq("CodBarras", idInventariomateriasPrimas))
				.setFetchSize(1).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		if(InvMp==null){
			return null;
		}else{
			return InvMp.get(0);
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<InventariomateriasPrimasEntity> getInventarioMateriaPrimaPorId(
			Integer idInventariomateriasPrimas) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<InventariomateriasPrimasEntity> materia = (List<InventariomateriasPrimasEntity>) session.createCriteria(InventariomateriasPrimasEntity.class)
				.add(Restrictions.eq("CodBarras", idInventariomateriasPrimas))
				.list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return materia;
	}

}
